package org.me.client;

public class NummerMatrix {
	Number[][] nummerMatrix;

	/**
	 * @param matrix
	 */
	public NummerMatrix(Number[][] nummerMatrix) {
		super();
		if (MatrixBeweisen(nummerMatrix) == true) {
			this.nummerMatrix = nummerMatrix;
		} else {
			this.nummerMatrix = null;
		}
	}

	/**
	 * @param kolonne
	 */
	public NummerMatrix(Number[] kolonne) {
		super();
		this.nummerMatrix = new NummerMatrix(kolonne.length, 1).getMatrix();
		for (int i = 0; i < kolonne.length; i++) {
			sElementSetzen(kolonne[i], i, 0);
		}
	}

	/**
	 * @param eLange
	 * @return eine NummerMatrix voll Nullen
	 */
	public NummerMatrix(int eLange) {
		super();
		this.nummerMatrix = new NummerMatrix(eLange, eLange).getMatrix();
	}

	/**
	 * @param eLange
	 * @return eine NummerMatrix voll Nullen
	 */
	public NummerMatrix(int eLange, int eBreite) {
		super();
		this.nummerMatrix = new NummerMatrix(eLange, eBreite, new Double(0.0 / 0.0))
				.getMatrix();
	}

	/**
	 * @param eLange
	 * @return eine NummerMatrix voll Nullen
	 */
	public NummerMatrix(int eLange, int eBreite, Number durchErmangelung) {
		super();
		this.nummerMatrix = new Number[eLange][eBreite];
		for (int i = 0; i < eLange - 1; i++) {
			for (int j = 0; j < eBreite - 1; j++) {
				sElementSetzen(durchErmangelung, i, j);
			}
		}
	}

	/**
	 * @param A
	 *            Die Vereinbarung um zu testen
	 * @return Ob wenn es sei eine Matrize oder nicht
	 */
	public static boolean MatrixBeweisen(Object[][] A) {
		int eSumme = 0;
		for (int i = 0; i < A.length; i++) {
			if (A[0].length != A[i].length) {
				eSumme = eSumme + 1;
			}
		}
		if (eSumme == 0) {
			return true;
		}
		return false;
	}

	protected NummerMatrix(){

	}

	public int eLange() {
		return this.getMatrix().length;
	}

	public int eBreite() {
		return this.getMatrix()[0].length;
	}

	public Number[] kolonne(int k) {
		Number[] b = new Number[eLange()];
		for (int i = 0; i < b.length; i++) {
			b[i] = new Double(sElementGeben(i, k - 1).doubleValue());
		}
		return b;
	}

	public Number sElementGeben(int x, int y) {
		return getMatrix()[x][y];
	}

	public void sElementSetzen(Number sElement, int x, int y) {
		getMatrix()[x][y] = sElement;
	}

	/**
	 * @return the nummerMatrix
	 */
	private Number[][] getMatrix() {
		return nummerMatrix;
	}

}
